package com.example.listeners;

import javax.servlet.ServletContext;
import javax.servlet.http.HttpSessionEvent;
import javax.servlet.http.HttpSessionListener;

public class OnlineCountListener implements HttpSessionListener {

    @Override
    public void sessionCreated(HttpSessionEvent se) {
        // 此方法在一个新会话被创建时触发（即新用户访问）
        
        // 1. 获取整个应用的上下文对象 ServletContext
        ServletContext ctx = se.getSession().getServletContext();
        
        // 2. 从ServletContext中获取当前在线人数
        Integer onlineCount = (Integer) ctx.getAttribute("onlineCount");
        
        // 3. 如果是第一个用户，则初始化为1，否则加1
        if (onlineCount == null) {
            onlineCount = 1;
        } else {
            onlineCount++;
        }
        
        // 4. 将更新后的人数存回ServletContext
        ctx.setAttribute("onlineCount", onlineCount);
        
        System.out.println("【新用户上线】当前在线人数：" + onlineCount);
    }

    @Override
    public void sessionDestroyed(HttpSessionEvent se) {
        // 此方法在一个会话被销毁时触发（用户关闭浏览器或超时）
        ServletContext ctx = se.getSession().getServletContext();
        Integer onlineCount = (Integer) ctx.getAttribute("onlineCount");
        
        if (onlineCount != null && onlineCount > 0) {
            onlineCount--;
        } else {
            onlineCount = 0;
        }
        
        ctx.setAttribute("onlineCount", onlineCount);
        
        System.out.println("【用户下线】当前在线人数：" + onlineCount);
    }
}